1. Components Required

ComponentPurpose
Raspberry Pi 4 (or Pi 3 B+)Main controller for sensors, AI processing & web server
Raspberry Pi CameraCaptures leaf images for disease detection
ADS1115 ADC ModuleConverts analog soil & pH sensor readings to digital
Soil Moisture SensorMeasures soil water content
pH Sensor KitMonitors soil acidity/alkalinity
BME280 SensorMeasures temperature & humidity
Relay ModuleControls water pump for irrigation
Water Pump + Pipe + TankAutomatic irrigation
Breadboard + Jumper WiresPrototyping connections
16x2 LCD (optional)Local display of readings
5V Power SupplyTo power Raspberry Pi & pump

2. System Architecture

┌───────────────────────────┐
│        Raspberry Pi        │
│                           │
│ Soil Moisture (ADS1115)   │
│ pH Sensor (ADS1115)       │
│ BME280 (Temp/Humidity)    │
│ Pi Camera (Disease AI)    │
│ Relay → Pump              │
└─────────────┬─────────────┘
              │
              ▼
Sensors → Data Logging → Disease Detection → Flask Dashboard → Alerts
    
System Architecture

3. Wiring Connections

Moisture Sensor pH Sensor

4. Software Setup

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-opencv python3-flask i2c-tools git -y
pip3 install adafruit-circuitpython-ads1x15 adafruit-circuitpython-bme280 tensorflow flask matplotlib
sudo raspi-config   # Enable Camera & I²C
    

5. Sensor Reading Code

import time, board, busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
import adafruit_bme280.basic as adafruit_bme280

i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c)
chan0 = AnalogIn(ads, ADS.P0)
chan1 = AnalogIn(ads, ADS.P1)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

while True:
    print("Soil Moisture:", chan0.value)
    print("Soil pH:", chan1.voltage)
    print("Temp:", bme280.temperature)
    print("Humidity:", bme280.humidity)
    time.sleep(2)
    

6. Plant Disease Detection (AI Model)

  1. Collect dataset (PlantVillage)
  2. Train TensorFlow/Keras model
  3. Export .tflite to Raspberry Pi
import tensorflow as tf, cv2, numpy as np
interpreter = tf.lite.Interpreter(model_path="plant_disease.tflite")
interpreter.allocate_tensors()
def predict(image_path):
    img = cv2.imread(image_path)
    img = cv2.resize(img, (128,128))
    img = np.expand_dims(img, axis=0)/255.0
    input_details = interpreter.get_input_details()
    output_details = interpreter.get_output_details()
    interpreter.set_tensor(input_details[0]['index'], img.astype(np.float32))
    interpreter.invoke()
    return interpreter.get_tensor(output_details[0]['index'])
print(predict("leaf.jpg"))
    
Disease Detection

7. Flask Dashboard

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
    data = {"temperature":28,"humidity":65,"soil_moisture":300,"ph":6.5,"disease_status":"Healthy"}
    return render_template("index.html", data=data)
app.run(host='0.0.0.0', port=5000)
    

8. Testing & Calibration

9. Future Work

10. Project Visuals